home *** CD-ROM | disk | FTP | other *** search
- package regex;
-
- import java.util.Vector;
-
- public class RegExp extends RegExpCore {
- protected char getQuotedChar(char var1) {
- if (var1 == '0') {
- return '\u0000';
- } else if (var1 == 'b') {
- return '\b';
- } else if (var1 == 't') {
- return '\t';
- } else if (var1 == 'r') {
- return '\r';
- } else {
- return var1 == 'n' ? '\n' : var1;
- }
- }
-
- public RegExp() {
- }
-
- public RegExp(String var1) throws RegExpSyntaxException, NFABuildException {
- super(var1);
- }
-
- public String substitute(String var1, String var2, boolean var3) {
- return var3 ? this.globalSubstitute(var1, var2) : this.simpleSubstitute(var1, var2);
- }
-
- public MatchInfo match(String var1) {
- return this.match(var1, 0, var1.length());
- }
-
- public MatchInfo match(String var1, int var2, int var3) {
- DState var6 = super.dfa.initialState();
- if ((var2 == 0 || var1.charAt(var2 - 1) == '\n') && super.dfa.hasLHead()) {
- int var5 = this.matchHead(var1, var2, var3, var6);
- if (var5 != -1) {
- return new MatchInfo(var2, var5, var1.substring(var2, var5));
- }
- }
-
- int var4;
- for(var4 = var2; var4 < var3; ++var4) {
- int var7 = this.matchInside(var1, var4, var3, var6);
- if (var7 != -1) {
- return new MatchInfo(var4, var7, var1.substring(var4, var7));
- }
-
- if (var1.charAt(var4) == '\n' && super.dfa.hasLHead() && var4 < var1.length() - 1) {
- var7 = this.matchHead(var1, var4 + 1, var3, var6);
- if (var7 != -1) {
- return new MatchInfo(var4 + 1, var7, var1.substring(var4 + 1, var7));
- }
- }
- }
-
- return super.dfa.hasLTail() && super.dfa.nextState(var6, 3) != null ? new MatchInfo(var4, var4, "") : null;
- }
-
- public MatchInfo[] globalMatch(String var1) {
- int var2 = 0;
- Vector var5 = new Vector();
-
- MatchInfo var3;
- while((var3 = this.match(var1, var2, var1.length())) != null) {
- var5.addElement(var3);
- if (var3.start() == var2 && var3.start() == var3.end()) {
- var2 = var3.end() + 1;
- } else {
- var2 = var3.end();
- }
-
- if (var2 > var1.length() - 1) {
- break;
- }
- }
-
- MatchInfo[] var4 = new MatchInfo[var5.size()];
- var5.copyInto(var4);
- return var4;
- }
-
- public String[] split(String var1) {
- Vector var3 = new Vector();
- int var6 = 0;
- MatchInfo[] var4 = this.globalMatch(var1);
-
- for(int var5 = 0; var5 < var4.length; ++var5) {
- if (var6 != var4[var5].start()) {
- var3.addElement(var1.substring(var6, var4[var5].start()));
- }
-
- var6 = var4[var5].end();
- }
-
- if (var6 < var1.length()) {
- var3.addElement(var1.substring(var6, var1.length()));
- }
-
- String[] var2 = new String[var3.size()];
- var3.copyInto(var2);
- return var2;
- }
-
- protected String globalSubstitute(String var1, String var2) {
- int var3 = 0;
- String var5 = "";
-
- MatchInfo var4;
- while((var4 = this.match(var1, var3, var1.length())) != null) {
- var5 = var5 + var1.substring(var3, var4.start) + this.processReplacement(var2, var4.matchString());
- var3 = var4.end();
- if (var4.start() == var3 && var4.start() == var4.end() || var4.end() > var1.length() - 1) {
- break;
- }
- }
-
- if (var3 < var1.length()) {
- var5 = var5 + var1.substring(var3, var1.length());
- }
-
- return var5;
- }
-
- protected int matchInside(String var1, int var2, int var3, DState var4) {
- char var7 = 0;
- DState var8 = var4;
- int var5 = -1;
- int var6 = var2;
- if (var4 == null) {
- return var5;
- } else {
- while(var4 != null) {
- if (var4.accepted()) {
- var5 = var6;
- }
-
- if (var6 > var3 - 1) {
- if ((var3 == var1.length() || var1.charAt(var3 + 1) == '\n' || var1.charAt(var3 + 1) == '\r') && super.dfa.nextState(var4, 3) != null) {
- var5 = var6--;
- }
- break;
- }
-
- var8 = var4;
- var7 = var1.charAt(var6++);
- var4 = super.dfa.nextState(var4, var7);
- }
-
- if ((var7 == '\n' || var7 == '\r') && super.dfa.nextState(var8, 3) != null) {
- --var6;
- var5 = var6;
- }
-
- return var5;
- }
- }
-
- protected String simpleSubstitute(String var1, String var2) {
- MatchInfo var3 = this.match(var1);
- return var3 == null ? var1 : var1.substring(0, var3.start()) + this.processReplacement(var2, var3.matchString()) + var1.substring(var3.end(), var1.length());
- }
-
- protected int matchHead(String var1, int var2, int var3, DState var4) {
- int var5 = this.matchInside(var1, var2, var3, super.dfa.nextState(var4, 2));
- if (var5 != -1) {
- int var6 = this.matchInside(var1, var2, var3, var4);
- if (var6 > var5) {
- var5 = var6;
- }
- }
-
- return var5;
- }
-
- protected String processReplacement(String var1, String var2) {
- String var5 = "";
-
- for(int var3 = 0; var3 < var1.length(); ++var3) {
- char var4 = var1.charAt(var3);
- switch (var4) {
- case '&':
- var5 = var5 + var2;
- break;
- case '\\':
- ++var3;
- if (var3 == var1.length()) {
- new RegExpSyntaxException("Invalid escape sequence.");
- }
-
- var5 = var5 + this.getQuotedChar(var1.charAt(var3));
- break;
- default:
- var5 = var5 + var4;
- }
- }
-
- return var5;
- }
- }
-